﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Tibet.Datos;
using Tibet.Entidades;
using System.Data;

namespace Tibet.Datos
{
    public class AccesoUsuario
    {
        #region Constructor
        public AccesoUsuario()
        {
        }
        #endregion 

        #region Conexion
        /// <summary>
        /// Llamar a la clase de conexion
        /// <returns>devuelve la conexion</returns>

        Conexion bd = new Conexion();

        #endregion

        /// <summary>
        /// Metodo encargado de cargar en la interfaz los 
        /// diferentes proyecto existentes en la BD
        /// </summary>
        /// <returns><list type="Usuario"></list></returns>
        public List<Usuario> ConsultarUsuarios()
        {
            //Boolean respuestaQuery = false;
            List<Usuario> listaUsuarios = new List<Usuario>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELTodosDesarrolladores]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;            
                
                SqlDataReader reader = command.ExecuteReader();

                
                while (reader.Read())
                {
                    Usuario proy = new Usuario();
                    //proy.IdUsuario = reader.GetInt32(0);
                    proy.Id = reader.GetInt32(0);
                    //proy.NombreUsuario = reader.GetString(1);
                    proy.Nombre = reader.GetString(1);
                    listaUsuarios.Add(proy);
                }
                
                return listaUsuarios;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        /// <summary>
        /// Metodo encargado de insertar en la bd los datos actualizados del usuario 
        /// </summary>
        /// <returns><list type="Usuario"></list></returns>
        public bool modificarUsuario(String nombre, String apellido, String alias, String clave, String correo)
        {
            //Boolean respuestaQuery = false;
            
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[ModificarUsuario]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                command.Parameters.AddWithValue("@Nombre", nombre);
                command.Parameters.AddWithValue("@Apellido", apellido);
                command.Parameters.AddWithValue("@Username", alias);
                command.Parameters.AddWithValue("@Clave", clave);
                command.Parameters.AddWithValue("@Correo", correo);

                SqlDataReader reader = command.ExecuteReader();
                
                return true;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return false;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return false;
            }
        }

        /// <summary>
        /// Metodo encargado de listar los usuarios resultantes para mostrar la busqueda 
        /// </summary>
        /// <returns><list type="Usuario"></list></returns>
        public DataTable BuscarUsuario(String nombre, String apellido)
        {

            List<Usuario> lista = new List<Usuario>();
            SqlCommand command = new SqlCommand();

            DataTable tabla = new DataTable();

            try
            {

                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[BusquedaModificarCliente]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                command.Parameters.AddWithValue("@Nombre", nombre);
                command.Parameters.AddWithValue("@Apellido", apellido);

                SqlDataReader reader = command.ExecuteReader();
                

                tabla.Load(reader);       

                reader.Close();
                bd.CerrarConexionBd();

                return tabla;

            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();

            }

            catch (Exception)
            {
                bd.CerrarConexionBd();

            }
            return tabla;

        }

        /// <summary>
        /// Consultar la lista de errores por desarrolador 
        /// </summary>
        /// <param name="idDesa">
        /// es la clave para identificar en la BD un desarrollador
        /// </param>
        /// <returns><list type="ErrorP"></list></returns>
        public List<ErrorP> ConsultarErroresPorDesarrollador(int idDesa, int anio)
        {
            //Boolean respuestaQuery = false;
            List<ErrorP> listaDesa = new List<ErrorP>();

            SqlCommand command = new SqlCommand();

            try
            {

                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELErroresPorDesarrolladorPorAnio]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;//SELErroresDesarrollador

                command.Parameters.AddWithValue("@idDesa", idDesa);
                command.Parameters.AddWithValue("@anio", anio);

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    ErrorP error = new ErrorP();
                    error.Cant = reader.GetInt32(0);
                    error.Porcentaje = reader.GetInt32(1);
                    error.Mes = reader.GetString(2);
                    listaDesa.Add(error);

                }
                reader.Close();
                bd.CerrarConexionBd();

                return listaDesa;

            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }


        }

    }
}
